#!/bin/bash

# 密码管家应用构建脚本
echo "开始构建密码管家应用..."

# 创建发布目录
RELEASE_DIR="release"
mkdir -p $RELEASE_DIR

# 复制项目主入口和配置文件
echo "复制项目主入口和配置文件..."
cp server.js $RELEASE_DIR/
cp package.json $RELEASE_DIR/
cp .env $RELEASE_DIR/

# 复制后端代码到发布目录
echo "复制后端代码..."
mkdir -p $RELEASE_DIR/api
cp -r api/app.js $RELEASE_DIR/api/
cp -r api/config $RELEASE_DIR/api/
cp -r api/controllers $RELEASE_DIR/api/
cp -r api/middleware $RELEASE_DIR/api/
cp -r api/models $RELEASE_DIR/api/
cp -r api/routes $RELEASE_DIR/api/
cp -r api/utils $RELEASE_DIR/api/
cp api/init-database.js $RELEASE_DIR/api/
cp api/init_db.sql $RELEASE_DIR/api/

# 复制前端代码到发布目录
echo "复制前端代码..."
mkdir -p $RELEASE_DIR/frontend
cp -r frontend/* $RELEASE_DIR/frontend/

# 创建启动脚本
echo "创建启动脚本..."
cat > $RELEASE_DIR/start.sh << 'EOF'
#!/bin/bash

# 启动应用脚本
echo "启动密码管家应用..."

# 安装依赖
npm install

# 初始化数据库（如果需要）
echo "正在初始化数据库..."
node api/init-database.js

# 启动服务
node server.js
EOF

# 创建Windows启动脚本
cat > $RELEASE_DIR/start.bat << 'EOF'
@echo off

:: Windows启动脚本
echo 启动密码管家应用...

:: 安装依赖
npm install

:: 初始化数据库（如果需要）
echo 正在初始化数据库...
node api\init-database.js

:: 启动服务
node server.js
EOF

# 创建部署说明文档
echo "创建部署说明..."
cat > $RELEASE_DIR/README_DEPLOY.md << 'EOF'
# 密码管家部署说明

## 环境要求
- Node.js 16.x 或更高版本
- MySQL 5.7 或更高版本

## 部署步骤

1. **准备数据库**
   - 创建MySQL数据库：`CREATE DATABASE keymanagedb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;`
   - 创建数据库用户并授权

2. **配置环境变量**
   - 编辑 `.env` 文件
   - 修改数据库连接信息和JWT密钥

3. **安装依赖**
   ```bash
   npm install
   ```

4. **初始化数据库**
   ```bash
   node api/init-database.js
   ```

5. **启动服务**
   - Linux/Mac: 运行 `./start.sh`
   - Windows: 运行 `start.bat`
   - 或手动运行: `node server.js`

6. **访问应用**
   - 打开浏览器访问: http://localhost:3000

## 宝塔面板部署

1. **上传项目文件**
   - 上传整个发布目录到宝塔网站根目录

2. **创建数据库**
   - 在宝塔面板创建数据库，使用与.env文件中配置相同的数据库名、用户名和密码

3. **设置环境**
   - 确保已安装Node.js 16.x或更高版本

4. **安装PM2管理器**
   - 在宝塔软件商店安装PM2管理器

5. **添加PM2项目**
   - 项目名称：password-manager
   - 启动文件：server.js
   - 项目路径：网站根目录
   - 点击「添加」按钮

6. **配置Nginx反向代理**
   - 目标URL：http://127.0.0.1:3000
   - 配置SSL证书以启用HTTPS

## 生产环境建议
1. 使用PM2进行进程管理
   ```bash
   npm install -g pm2
   pm2 start app.js --name "password-manager"
   ```

2. 配置Nginx作为反向代理

3. 配置HTTPS

4. 定期备份数据库

EOF

# 设置执行权限
chmod +x $RELEASE_DIR/start.sh

echo "构建完成！"
echo "发布文件位置: ./$RELEASE_DIR"
echo "请参考 $RELEASE_DIR/README_DEPLOY.md 进行部署"